/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package DAO;

import Entidades.UsuarioEnt;
import Utilidades.Conexion;
import Utilidades.Constantes;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;

import java.util.ArrayList;
import java.util.List;
import java.util.logging.Level;
import java.util.logging.Logger;

/**
 *
 * @author usuario
 */

public class UsuarioDAO {
    Conexion con;
    Connection connect;
    
    public UsuarioEnt buscarUsuario(UsuarioEnt user) throws SQLException{
    
        con = new Conexion();
        connect = con.getCon();
 
        try {
            PreparedStatement st = connect.prepareStatement(Constantes.CONSULTAUSER);
            
            
            st.setString(1, user.getNombre());
            st.setString(2, user.getContrasena());
            
            ResultSet rs = st.executeQuery();
            
            if(rs != null){
                if (rs.next()) {
                    
                    user.setCodigo(Integer.parseInt(rs.getString("IDENTIFICACION")));
                    user.setNombre(rs.getString("NOMBRE"));
                    user.setCorreoElectronico(rs.getString("CORREO_ELECTRONICO"));
                    user.setDireccion(rs.getString("DIRECCION"));
                    user.setGenero(rs.getString("GENERO"));
                    user.setNombrePersona(rs.getString("NOMBRE_PERSONA"));
                    user.getRole().setCodigo(Integer.parseInt(rs.getString("ROLE")));
                }
            }
            connect.close();
        } catch (SQLException ex) {
            Logger.getLogger(UsuarioDAO.class.getName()).log(Level.SEVERE, null, ex);
            connect.close();
        }
        
        return user;
    }
    
    public int ingresarUsuario(UsuarioEnt usuario) throws SQLException{
    
        int ingresar = 0;
        con = new Conexion();
        connect = con.getCon();
 
        try {
            PreparedStatement st = connect.prepareStatement(Constantes.INGRESAR_USUARIO);
            
            
            st.setString(1, usuario.getNombre());
            st.setString(2, usuario.getContrasena());
            st.setString(3, usuario.getNombrePersona());
            st.setString(4, usuario.getCorreoElectronico());
            st.setString(5, usuario.getGenero());
            st.setString(6, usuario.getDireccion());
            st.setInt(7, usuario.getRole().getCodigo());
            
            st.executeUpdate();
            ingresar = 1;
            connect.close();
        } catch (SQLException ex) {
            Logger.getLogger(UsuarioDAO.class.getName()).log(Level.SEVERE, null, ex);
            connect.close();
        }
        
        return ingresar;
    }
    
        
     public List<UsuarioEnt> busquedaUsuarios(UsuarioEnt usuario) throws SQLException{
    
         List<UsuarioEnt>  lstUsuario = new ArrayList<UsuarioEnt>();
         UsuarioEnt user;
        con = new Conexion();
        connect = con.getCon();
 
        try {
            
            PreparedStatement st = connect.prepareStatement(Constantes.BUSQUEDA_USUARIO);
            
            
            st.setString(1, usuario.getNombre());
            
            ResultSet rs = st.executeQuery();
            
            if(rs != null){
                while (rs.next()) {
                    
                    user = new UsuarioEnt();
                    user.setCodigo(Integer.parseInt(rs.getString("IDENTIFICACION")));
                    user.setNombre(rs.getString("NOMBRE"));
                    user.setCorreoElectronico(rs.getString("CORREO_ELECTRONICO"));
                    user.setDireccion(rs.getString("DIRECCION"));
                    user.setGenero(rs.getString("GENERO"));
                    user.setNombrePersona(rs.getString("NOMBRE_PERSONA"));
                    user.getRole().setCodigo(Integer.parseInt(rs.getString("ROLE")));
                    
                    lstUsuario.add(user);
                }
            }
            connect.close();
        } catch (SQLException ex) {
            Logger.getLogger(UsuarioDAO.class.getName()).log(Level.SEVERE, null, ex);
            connect.close();
        }
        
        return lstUsuario;
    }
     
   public UsuarioEnt buscarUsuarioPorId(int idUser) throws SQLException{
    
        con = new Conexion();
        connect = con.getCon();
        UsuarioEnt user = new UsuarioEnt();
        
        try {
            PreparedStatement st = connect.prepareStatement(Constantes.BUSCAR_USUARIO_POR_ID);
            
            
            st.setInt(1, idUser);
            
            
            ResultSet rs = st.executeQuery();
            
            if(rs != null){
                if (rs.next()) {
                    
                    user.setCodigo(Integer.parseInt(rs.getString("IDENTIFICACION")));
                    user.setNombre(rs.getString("NOMBRE"));
                    user.setCorreoElectronico(rs.getString("CORREO_ELECTRONICO"));
                    user.setDireccion(rs.getString("DIRECCION"));
                    user.setGenero(rs.getString("GENERO"));
                    user.setNombrePersona(rs.getString("NOMBRE_PERSONA"));
                    user.getRole().setCodigo(Integer.parseInt(rs.getString("ROLE")));
                }
            }
            connect.close();
        } catch (SQLException ex) {
            Logger.getLogger(UsuarioDAO.class.getName()).log(Level.SEVERE, null, ex);
            connect.close();
        }
        
        return user;
    }
   
   
   public int actualizarUsuario(UsuarioEnt usuario) throws SQLException{
    
        int ingresar = 0;
        con = new Conexion();
        connect = con.getCon();
 
        try {
            PreparedStatement st = connect.prepareStatement(Constantes.ACTUALIZAR_USUARIO);
           
            st.setString(1, usuario.getNombrePersona());
            st.setString(2, usuario.getCorreoElectronico().trim());
            st.setString(3, usuario.getGenero());
            st.setString(4, usuario.getDireccion().trim());
            st.setInt(5, usuario.getCodigo());
            
            st.executeUpdate();
            ingresar = 1;
            connect.close();
        } catch (SQLException ex) {
            Logger.getLogger(UsuarioDAO.class.getName()).log(Level.SEVERE, null, ex);
            connect.close();
        }
        
        return ingresar;
    }
    
      public int eliminarUsuario(int idUsuario) throws SQLException{
    
        int eliminar = 0;
        con = new Conexion();
        connect = con.getCon();
 
        try {
            PreparedStatement st = connect.prepareStatement(Constantes.ELIMINAR_USUARIO);
   
            st.setInt(1, idUsuario);

            st.executeUpdate();
            eliminar = 1;
            connect.close();
        } catch (SQLException ex) {
            Logger.getLogger(UsuarioDAO.class.getName()).log(Level.SEVERE, null, ex);
            connect.close();
        }
        
        return eliminar;
    }
   
}
